package com.milo.zip;

import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.model.enums.AesKeyStrength;
import net.lingala.zip4j.model.enums.EncryptionMethod;
import org.junit.Test;

import java.io.File;
import java.util.Arrays;
import java.util.List;

/**
 * @author Milo Lee
 * @date 2020-12-28 15:47
 */
public class ZipTest {

    /**
     *创建zip文件,包含单个文件
     */
    @Test
    public void test1(){
        try {
            //方式一
            new ZipFile("F:\\电子书\\milolee.zip").addFile("F:\\电子书\\Head First Java 中文高清版.pdf");
            //方式二
            new ZipFile("F:\\电子书\\milolee.zip").addFile(new File("F:\\电子书\\Head First Java 中文高清版.pdf"));
        } catch (ZipException e) {
            e.printStackTrace();
        }
    }

    /**
     * 创建zip文件,包含多个文件
     */
    @Test
    public void test2(){
        try {
            new ZipFile("F:\\电子书\\milolee.zip").addFiles(Arrays.asList(new File("F:\\电子书\\Head First Java 中文高清版.pdf"),
                    new File("F:\\电子书\\Spring源码深度解析.pdf")));
        } catch (ZipException e) {
            e.printStackTrace();
        }
    }

    /**
     * 创建受密码保护的zip文件
     */
    @Test
    public void test3(){
        ZipParameters zipParameters = new ZipParameters();
        zipParameters.setEncryptFiles(true);
        zipParameters.setEncryptionMethod(EncryptionMethod.AES);
        // Below line is optional. AES 256 is used by default. You can override it to use AES 128. AES 192 is supported only for extracting.
        zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);

        List<File> filesToAdd = Arrays.asList(
                new File("F:\\电子书\\Head First Java 中文高清版.pdf"),
                new File("F:\\电子书\\Spring源码深度解析.pdf")
        );

        ZipFile zipFile = new ZipFile("F:\\电子书\\milolee.zip", "milolee".toCharArray());
        try {
            zipFile.addFiles(filesToAdd, zipParameters);
        } catch (ZipException e) {
            e.printStackTrace();
        }
    }

    /**
     * 解压zip
     */
    @Test
    public void test4(){
        try {
            new ZipFile("F:\\电子书\\milolee.zip").extractAll("F:\\电子书\\jy");
        } catch (ZipException e) {
            e.printStackTrace();
        }
    }

    /**
     * 解压一个受密码保护的zip文件
     */
    @Test
    public void test5(){
        try {
            new ZipFile("F:\\电子书\\milolee.zip", "milolee".toCharArray()).extractAll("F:\\电子书\\jy");
        } catch (ZipException e) {
            e.printStackTrace();
        }
    }
}
